home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / appldata.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.2 KB  |  91 lines

  1. /*
  2.  * include/asm-s390/appldata.h
  3.  *
  4.  * Copyright (C) IBM Corp. 2006
  5.  *
  6.  * Author(s): Melissa Howland <melissah@us.ibm.com>
  7.  */
  8.  
  9. #ifndef _ASM_S390_APPLDATA_H
  10. #define _ASM_S390_APPLDATA_H
  11.  
  12. #include <asm/io.h>
  13.  
  14. #ifndef CONFIG_64BIT
  15.  
  16. #define APPLDATA_START_INTERVAL_REC    0x00    /* Function codes for */
  17. #define APPLDATA_STOP_REC        0x01    /* DIAG 0xDC          */
  18. #define APPLDATA_GEN_EVENT_REC        0x02
  19. #define APPLDATA_START_CONFIG_REC    0x03
  20.  
  21. /*
  22.  * Parameter list for DIAGNOSE X'DC'
  23.  */
  24. struct appldata_parameter_list {
  25.     u16 diag;        /* The DIAGNOSE code X'00DC'          */
  26.     u8  function;        /* The function code for the DIAGNOSE */
  27.     u8  parlist_length;    /* Length of the parameter list       */
  28.     u32 product_id_addr;    /* Address of the 16-byte product ID  */
  29.     u16 reserved;
  30.     u16 buffer_length;    /* Length of the application data buffer  */
  31.     u32 buffer_addr;    /* Address of the application data buffer */
  32. } __attribute__ ((packed));
  33.  
  34. #else /* CONFIG_64BIT */
  35.  
  36. #define APPLDATA_START_INTERVAL_REC    0x80
  37. #define APPLDATA_STOP_REC        0x81
  38. #define APPLDATA_GEN_EVENT_REC        0x82
  39. #define APPLDATA_START_CONFIG_REC    0x83
  40.  
  41. /*
  42.  * Parameter list for DIAGNOSE X'DC'
  43.  */
  44. struct appldata_parameter_list {
  45.     u16 diag;
  46.     u8  function;
  47.     u8  parlist_length;
  48.     u32 unused01;
  49.     u16 reserved;
  50.     u16 buffer_length;
  51.     u32 unused02;
  52.     u64 product_id_addr;
  53.     u64 buffer_addr;
  54. } __attribute__ ((packed));
  55.  
  56. #endif /* CONFIG_64BIT */
  57.  
  58. struct appldata_product_id {
  59.     char prod_nr[7];    /* product number */
  60.     u16  prod_fn;        /* product function */
  61.     u8   record_nr;     /* record number */
  62.     u16  version_nr;    /* version */
  63.     u16  release_nr;    /* release */
  64.     u16  mod_lvl;        /* modification level */
  65. } __attribute__ ((packed));
  66.  
  67. static inline int appldata_asm(struct appldata_product_id *id,
  68.                    unsigned short fn, void *buffer,
  69.                    unsigned short length)
  70. {
  71.     struct appldata_parameter_list parm_list;
  72.     int ry;
  73.  
  74.     if (!MACHINE_IS_VM)
  75.         return -ENOSYS;
  76.     parm_list.diag = 0xdc;
  77.     parm_list.function = fn;
  78.     parm_list.parlist_length = sizeof(parm_list);
  79.     parm_list.buffer_length = length;
  80.     parm_list.product_id_addr = (unsigned long) id;
  81.     parm_list.buffer_addr = virt_to_phys(buffer);
  82.     asm volatile(
  83.         "    diag    %1,%0,0xdc"
  84.         : "=d" (ry)
  85.         : "d" (&parm_list), "m" (parm_list), "m" (*id)
  86.         : "cc");
  87.     return ry;
  88. }
  89.  
  90. #endif /* _ASM_S390_APPLDATA_H */
  91.